<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1. H指数 II
        /* 
            一名科研人员的 h 指数是指他（她）的 （n 篇论文中）至少 有 h 篇论文分别被引用了至少 h 次
            =>  [0,1,3,5,6] 3
            =>  有3篇论文至少被引用了3次，如果是5，就是至少有5篇论文至少被引用了5次，显然上面不符合条件，如果是1，至少1有1篇论文被引用了1次
        */
        
        var hIndex = function(citations) {
            let ans = 0
            let n = citations.length
            // 因为肯定有0篇论文的引用次数>=0，所以left原本写=-1，这里写=0
            let left = 0;
            // 注意这里是n+1，防止[100]不满足条件退出
            let right = n + 1
            let mid;
            while (left + 1 < right) {
                mid = left + ((right - left) >> 1)
                // citations[n - mid]表示从后往前数第mid个数对应引用次数，如果比mid大，说明至少存在mid篇论文的引用次数大于等于mid,此时就去尝试更大的H指数，left等于mid
                // 比如[0,1,3,5,6],如果mid=2, n - 2就是3，citations[3]就是5,大于2，此时至少有2篇论文的引用次数大于2，尝试更大的指数，left改为2
                if (citations[n - mid] >= mid) {
                    // 此时满足条件，要尝试更大的H值；和以往的开区间不一样，之前的开区间这里改的是right
                    left = mid
                } else {
                    // 不满足条件，尝试更小的H值
                    right = mid
                }
            }
            // 本题返回left，因为left是满足条件的H值
            return left
        };
        // console.log(hIndex([100]), 'hIndex');
        // console.log(hIndex([0,1,3,5,6]), 'hIndex');
        console.log(hIndex([1]), 'hIndex');
    </script>
</body>

</html>